#include "key.h"
#include "GPIO.h"


void Key_Init(void)
{
		P5_MODE_IO_PU(GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4);
}

#define	DOWN	0
#define	UP		1

u8 last_key_states[] = {UP, UP, UP, UP};		// key的最后一次状态

// 判断指定位置【是否是】按下或抬起
#define	IS_KEY_DOWN(i)		last_key_states[i] == DOWN
#define	IS_KEY_UP(i)		last_key_states[i] == UP

// 将指定位置值【设置】为按下或抬起
#define SET_KEY_DOWN(i)		last_key_states[i] = DOWN
#define SET_KEY_UP(i)		last_key_states[i] = UP
int key_num = 0;                                //记录按下的按键
int Key_Scan()
{	
	if(KEY1 && IS_KEY_DOWN(0)){ // 这次是抬起Up 1, 上一次是按下Down 0
			key_num = 0;
			SET_KEY_UP(0);
		}else if(!KEY1 && IS_KEY_UP(0)){// 这次是按下Down 0, 上一次是抬起Up 1	
			while(!KEY1);
			key_num = 1;
			SET_KEY_DOWN(0);
		}
		
		if(KEY2 && IS_KEY_DOWN(1)){ // 这次是抬起Up 1, 上一次是按下Down 0
			key_num = 0;
			SET_KEY_UP(1);
		}else if(!KEY2 && IS_KEY_UP(1)){// 这次是按下Down 0, 上一次是抬起Up 1
			while(!KEY2);
			key_num = 2;
			SET_KEY_DOWN(1);
		}
		
		if(KEY3 && IS_KEY_DOWN(2)){ // 这次是抬起Up 1, 上一次是按下Down 0
			key_num = 0;
			SET_KEY_UP(2);
		}else if(!KEY3 && IS_KEY_UP(2)){// 这次是按下Down 0, 上一次是抬起Up 1
			while(!KEY3);
			key_num = 3;	
			SET_KEY_DOWN(2);
		}
		
		if(KEY4 && IS_KEY_DOWN(3)){ // 这次是抬起Up 1, 上一次是按下Down 0
			key_num = 0;
			SET_KEY_UP(3);
		}else if(!KEY4 && IS_KEY_UP(3)){// 这次是按下Down 0, 上一次是抬起Up 1
			while(!KEY4);
			key_num = 4;	
			SET_KEY_DOWN(3);
		}
		return key_num;                 //返回4个按键的序号
}